{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=!pip list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1b519076e70>,\n",
       " <matplotlib.lines.Line2D at 0x1b519076ea0>]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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aDQaREVFef195Cg0NBRt2rTB6dOnvf7x06hRI3To0KHYZe3bt7dvjdW352YGKiVotVr06NED69evt19mtVqxfv16xMfHe3BlytOiRQtER0cXu69ycnKwa9cur7ivRFHEtGnTsGLFCmzYsAEtWrQodn2PHj3g4+NT7P5JSkrCxYsXveL+ccZqtcJgMPC+ATBs2DAcPnwYBw4csH/07NkTDz74oP3v3n4fOcrNzcWZM2fQqFEjr3/89O/fv9QohJMnT6JZs2YA6uFzs6ereZVoyZIlok6nExcuXCgeO3ZMnDJlihgaGiqmpaV5emm1Tq/Xi/v37xf3798vAhA//PBDcf/+/eKFCxdEURTFd999VwwNDRV//fVX8dChQ+KYMWPEFi1aiAUFBR5euftNnTpVDAkJETdt2iSmpqbaP/Lz8+23efzxx8XY2Fhxw4YN4t69e8X4+HgxPj7eg6uuPS+++KK4efNm8dy5c+KhQ4fEF198URQEQfzrr79EUfTu+8YVx64fUfTu++jZZ58VN23aJJ47d07ctm2bOHz4cDE8PFzMyMgQRdG775vdu3eLGo1GfPvtt8VTp06JixYtEv39/cUffvjBfpv69NzMQMWFzz77TIyNjRW1Wq3Yu3dvcefOnZ5ekkds3LhRBFDqY8KECaIoSm1wL7/8shgVFSXqdDpx2LBhYlJSkmcXXUuc3S8AxAULFthvU1BQID7xxBNigwYNRH9/f/H2228XU1NTPbfoWvTII4+IzZo1E7VarRgRESEOGzbMHqSIonffN66UDFS8+T669957xUaNGolarVZs0qSJeO+994qnT5+2X+/N940oiuKqVavETp06iTqdTmzXrp04b968YtfXp+dmQRRF0TO5HCIiIqKysUaFiIiIFIuBChERESkWAxUiIiJSLAYqREREpFgMVIiIiEixGKgQERGRYjFQISIiIsVioEJERESKxUCFiIiIFIuBChERESkWAxUiIiJSLAYqREREpFj/Dw3i1H6o5Rn8AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,20*np.pi)\n",
    "plt.plot(x,np.tan(x),x,np.cos(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy                     2.1.3\n",
      "matplotlib                3.9.2\n",
      "matplotlib-inline         0.1.7\n"
     ]
    }
   ],
   "source": [
    "for item in a:\n",
    "    if 'numpy' in item:\n",
    "        print(item)\n",
    "        \n",
    "for item in a:\n",
    "    if 'matplotlib' in item:\n",
    "        print(item)       "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"83pt\" height=\"116pt\"\n",
       " viewBox=\"0.00 0.00 83.07 116.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 112)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-112 79.07,-112 79.07,4 -4,4\"/>\n",
       "<!-- A -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>A</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"37.53\" cy=\"-90\" rx=\"37.53\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"37.53\" y=\"-84.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">NobeA</text>\n",
       "</g>\n",
       "<!-- B -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>B</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"37.53\" cy=\"-18\" rx=\"37.02\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"37.53\" y=\"-12.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">NobeB</text>\n",
       "</g>\n",
       "<!-- A&#45;&gt;B -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>A&#45;&gt;B</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M37.53,-71.7C37.53,-64.41 37.53,-55.73 37.53,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"41.03,-47.62 37.53,-37.62 34.03,-47.62 41.03,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x1b56d335d60>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "'''import graphviz as viz\n",
    "viz.Digraph()'''\n",
    "from graphviz import Digraph\n",
    "dot=Digraph()\n",
    "dot.node('A','NobeA')\n",
    "dot.node('B','NobeB')\n",
    "dot.edge('A','B')\n",
    "dot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 1.0\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0\n",
      "profit= 1.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 顺序结构 Pages: 1 -->\n",
       "<svg width=\"214pt\" height=\"476pt\"\n",
       " viewBox=\"0.00 0.00 214.11 476.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
       "<title>顺序结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-472 210.11,-472 210.11,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-468 76.06,-468 76.06,-432 130.06,-432 130.06,-468\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-444.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"206.11,-396 42.17,-396 0,-360 163.94,-360 206.11,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-372.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">input Radius =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-431.7C103.06,-424.41 103.06,-415.73 103.06,-407.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-407.62 103.06,-397.62 99.56,-407.62 106.56,-407.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"144.81,-324 61.31,-324 61.31,-288 144.81,-288 144.81,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-300.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print Radius</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-359.7C103.06,-352.41 103.06,-343.73 103.06,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-335.62 103.06,-325.62 99.56,-335.62 106.56,-335.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"154.93,-252 51.18,-252 51.18,-216 154.93,-216 154.93,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-228.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating Area</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-287.7C103.06,-280.41 103.06,-271.73 103.06,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-263.62 103.06,-253.62 99.56,-263.62 106.56,-263.62\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"168.43,-180 37.68,-180 37.68,-144 168.43,-144 168.43,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating perimeter</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-215.7C103.06,-208.41 103.06,-199.73 103.06,-191.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-191.62 103.06,-181.62 99.56,-191.62 106.56,-191.62\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-108 76.06,-108 76.06,-72 130.06,-72 130.06,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-84.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">print</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-143.7C103.06,-136.41 103.06,-127.73 103.06,-119.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-119.62 103.06,-109.62 99.56,-119.62 106.56,-119.62\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-36 76.06,-36 76.06,0 130.06,0 130.06,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-12.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">end</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-71.7C103.06,-64.41 103.06,-55.73 103.06,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-47.62 103.06,-37.62 99.56,-47.62 106.56,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x1b517dc2cc0>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (<string>, line 0)",
     "output_type": "error",
     "traceback": [
      "Traceback \u001b[1;36m(most recent call last)\u001b[0m:\n",
      "\u001b[0m  File \u001b[0;32me:\\python\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3577\u001b[0m in \u001b[0;35mrun_code\u001b[0m\n    exec(code_obj, self.user_global_ns, self.user_ns)\u001b[0m\n",
      "\u001b[1;36m  Cell \u001b[1;32mIn[21], line 4\u001b[1;36m\n\u001b[1;33m    Radius = eval(input(\"请输入圆半径:\"))\u001b[1;36m\n",
      "\u001b[1;36m  File \u001b[1;32m<string>\u001b[1;36m\u001b[0m\n\u001b[1;33m    \u001b[0m\n\u001b[1;37m    ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'graphviz' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mc:\\VSWork\\Pythonwork\\0001\\第二_课程序设计基础.ipynb Cell 19\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m dot\u001b[39m=\u001b[39mgraphviz\u001b[39m.\u001b[39mDigraph(comment\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mthe round table\u001b[39m\u001b[39m'\u001b[39m,name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m分支结构\u001b[39m\u001b[39m\"\u001b[39m,node_attr\u001b[39m=\u001b[39m{\u001b[39m'\u001b[39m\u001b[39mshape\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m'\u001b[39m\u001b[39mbox\u001b[39m\u001b[39m'\u001b[39m})\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=1'>2</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m1\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m开始\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m2\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m输入Real Number =?\u001b[39m\u001b[39m'\u001b[39m,shape\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mparallelogram\u001b[39m\u001b[39m'\u001b[39m)\n",
      "\u001b[1;31mNameError\u001b[0m: name 'graphviz' is not defined"
     ]
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (<string>, line 0)",
     "output_type": "error",
     "traceback": [
      "Traceback \u001b[1;36m(most recent call last)\u001b[0m:\n",
      "\u001b[0m  File \u001b[0;32me:\\python\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3577\u001b[0m in \u001b[0;35mrun_code\u001b[0m\n    exec(code_obj, self.user_global_ns, self.user_ns)\u001b[0m\n",
      "\u001b[1;36m  Cell \u001b[1;32mIn[20], line 4\u001b[1;36m\n\u001b[1;33m    RealNumber = eval(input(\"输入实数:\"))\u001b[1;36m\n",
      "\u001b[1;36m  File \u001b[1;32m<string>\u001b[1;36m\u001b[0m\n\u001b[1;33m    \u001b[0m\n\u001b[1;37m    ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 78\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\".//th.jpg\" width=\"150 \" alt=\"柯南\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                              \n",
      "                                                                                  ..                          \n",
      "...   ... .   ... .      .....   ...     ............................... ...... .'p~..    ...     ...  .......\n",
      "          .       .                 .            .                     . ...    . OZw '                       \n",
      "                                         . .  .    ..     .. . .    ..         ..[00OOq` '                    \n",
      "                                             '  ]p#pOLLLL00QOdMb(  `  ..  . .  .`#OOO0OZo.'                   \n",
      "                                      .^IoQ0QOOO0ZO0QLCCL0O0O0OOO0000O0M``...    ZO0O0OQC|                    \n",
      "                                  ''~dQLZZ00p*W##*#******#*#*#M*MWkZO0O000Ub \"'. QOOOOOd                      \n",
      "...       .           ........`` awwOQ0W**#*#************#**********o##*#mO0Ow# JOOOOw&`''...'.              .\n",
      "               ' ^' ._z0bbkkmzmC0OQkM##*****#**#*******#***************###*MkOZOhQ0O0%\"` \".k-..               \n",
      "         . ..'/b0ZO0ZLL0h@bWm0OOZ##******MoWw0OZ0a*##**#Q##M*******************aQLp0n'\\aou..                  \n",
      "         ..;00UWU .`.` pU0ZO0O0OM*#*##*MQ#o#*#MwO0ZO****#b0QWo****************#*##OOm08' . ..                 \n",
      "      ...aq.\" . ..` 8q0m0OOO*0O#**M#UWW*****##**#o#d0OQ*#qM#*Mpo*#*****#********#**kOk^..                     \n",
      "    ...i^'.    .  #O0OOCwOQM#OL#wQW*********M#*********LOphM****WmM*M*WOLM*#******o*#Z*. .                    \n",
      "...       .... `*OmZmb*d0CM*ZOOMM********M*bQo#********#*#ao*****#*######d*#*********M0?          ...  .......\n",
      "            ..`hOZ0ZM**0Oo*#a##*#M*##*###*okO0o#*******#******************#M****##****k8`'                    \n",
      "             .km0L#M*M0Zd#***##*$M***MM%x%%WOQOq*****##W*******#*#Mo##***###MoM*o***#*Mm                      \n",
      "            ._0OZM*@8oO0#*####M&}#*##*j_JM<#0OOOO##*****hX**#**##*#okx@##***o@_W##****#8 .                    \n",
      "...   ... . '*Ok#a;_#<OL#MM&o#B18###B(+<#L~_aLaLOOoM*****Wf##*##*M*WMMoM{{&#*#*@?m*o**#$.' ..     ...  .......\n",
      "            '#C#M `8@ QdM*@:**(+*#*8}-<_*X~~(#MMqOOwM#****d\\bW*aJ%o#MW)#&*WQ[W**%!\"@##*] .                    \n",
      "           .`bo$  .8M'*b#ol+&aokM##+i?M*&r++>I@Z##MO0o**##M&[#Wh[M(xw*oM&M8*M8*#ah~uWM$  .                    \n",
      "            .:W ''`B$. #*@>%lWW#ao@@$B&dcxM8C`lnZMaM#pm#*#*#M\"*B<~>LIjW$wB#Mz>>{)*ZMaM.\"'.                    \n",
      "            .. ` .  a  ,%##>B{#p#-l$*+.qB%\\a>-8Bo#h)zM#o***#*W#hIa*$<~o~~<:>;:ilw_##&__; `                    \n",
      "           .^w.    . %^',haW8<~xM$l!-L^qZ,'\"M`!>\\lMk#**M*****#Ci|\\{_<:c$h<i+<li)p-noWU+_n`.                   \n",
      "          ......    .`) :p@o%i+B0~^` W%:^\"^\"^J^++~I$>>->~?MMaoMX_~~I_>~~<~~~~~~+~l)||*~l,`..                  \n",
      ".........  ......    .  !<X)&&~$i^^\"\"$W$q ,.aU`+~~<0~+~~~<;q<^ob~~~~~~~~~~~~~~~<<Oa({I_o.^   .................\n",
      "                     . .O~;|]C0i+^\",,:#xcrjnB <+<_o++~~~>+~lc~<~~~~~~~~~~~~~~~~!Z8f&~~t.                      \n",
      "                       .i~?h|(|M+~~\"^\"\",^^ ,+<<~>a~_+_b+~~~++\\:~~~~~~~~~~~~~~~!|_z-+}`.                       \n",
      "                        '/i_~j)co<<<~~++~~+>_<<_!~~~><d{U>_~?+_iICm[:;I::;ra-?Y>+~0...                        \n",
      "                         '^v;<~+va~+Cbwqbhn!~+<<~~~~<~<~_~~~~~~~~~~~~~~~<~++#_i!v\"' .                         \n",
      "   ...   .....   .....    ..  &>?<<d+_+~~~~~~~<~~<+_~_<~,;}zmbd(i~~~~~~><_L*1,..    .. ...     ...            \n",
      "                              `` uZ~\"Z<<>~~+lQl<t<<<~~~++++~~~~~~~~~__>'dl$k*8  .'  .                         \n",
      "                              . `   ^''.;j~:>+~~~O~~~~~~~~~~~~~+~<<-`Y`     . t8 `                            \n",
      "                              ..J__~+,t^ `\"p<~~<!+~<~~~~~~~~~~~~\"* \" .         '^                             \n",
      "......................   ..... 'n+~~~~_]Q' m~~~<l%x;<++~~~_>?w/(\\} '.    ............. ..............  .......\n",
      "                               . }~~+~~<UkLk~~_~,h()vQ]1\\)//\\]*{1t#Zz^ ........                               \n",
      "                              '^Xqrh+<~>Z/J1d(]~>a%}))1|+obkap+Z*#bhbbowZmm#p> .   .                          \n",
      "                           . `J0w8]Y_t[m-[){/r\\#u+MqmwwwmdfpmWmpqwqwqZqZmmwwwwwdm]..                          \n",
      "                          ..rwZm,~><<~~<~~~<)(\\(o|'qMZhaakdwwqZbhwwwaqmqmqwwwwwwow_'.                         \n",
      "                            oohbU:Wi+_~~~++<~/\\\\]1bWqwqwkq;Wp8ckmwwqOpZmmmwqwwwmawL,.                         \n",
      "                         .  a#qpOi~~~~-<~~_+~~+b1hmmOmZq*)'  ^O,+UUnamdwwqdwwwwwhwpO. .                       \n",
      "                           WmZwqm~+~~~<~~~~~~++)(mhwwwZ!.^.Mk( ^^ nIhqma#*wwwwwwbqwwp `                       \n",
      "                         `mmwwwwwhY<~~~npkwQQQQbkdwwwwwm}\",`: Xj .^^ Zwwwwwqawwmqakwwk'.                      \n",
      "                       .. 0qwwwwwZ >~~~~+~~~~~+f(pwmwwwkpa ^\"Iq\"`<\"\" wwwwwZwqqwmwhaodb% .                     \n",
      "                        .*wwwwwwwmM u-{dmx|Yaou%Zwwaqqwwwqwmn,'`^L(+ZwZwwwpmwwwwmahkmZ+' .                    \n",
      "                      .  pmqwwqwwpwpB{to?)/]q)h#qwwwwmqmwwwwOOw\"fk#mwwwwqwmwwwwwq##wwh`.                      \n",
      "          .       .   ..'^Bpmqwwahkhaao8/f-#aaahwwwwwwwpwaZwwwwq*qwwwwwZ#wwwwwwwpMZZqd .            .         \n",
      "                      .. ..'W#hahaaaaaahaaaoaMwwwwwwwwwwwwmqkmmoqwmwqpkwwwwwwwwmmwmqqw8''   '      ..'... . . \n",
      "                            ..Qhhahhaaahhkwwwwwwwwwwwwwwwwwww0wwmwMmwwwwwwwwwwwp{(u!;,p! .l\"`>`\"I\"'  ^'I l .. \n",
      "                             .\":>#akh$(0wwwwwwwwwwwwwwwwwwwwdmwqdwqmwwwwwwwwwwwaZpmmqdq0;'  ... '  ...  .     \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "C:\\Users\\xxyl\\AppData\\Local\\Temp\\ipykernel_37312\\1728676095.py:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "  \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 110\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "\n",
    "pic = plt.imread(\".\\\\th.jpg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 分支结构 Pages: 1 -->\n",
       "<svg width=\"436pt\" height=\"676pt\"\n",
       " viewBox=\"0.00 0.00 436.02 675.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 671.5)\">\n",
       "<title>分支结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-671.5 432.02,-671.5 432.02,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"331.01,-667.5 277.01,-667.5 277.01,-631.5 331.01,-631.5 331.01,-667.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-643.33\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">开始</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"420.58,-594.5 235.15,-594.5 187.45,-558.5 372.87,-558.5 420.58,-594.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-571.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">请输入成绩=?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-631.31C304.01,-623.73 304.01,-614.6 304.01,-606.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-606.04 304.01,-596.04 300.51,-606.04 307.51,-606.04\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"304.01,-521.5 180,-503.5 304.01,-485.5 428.02,-503.5 304.01,-521.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-498.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于90?</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-558.31C304.01,-550.73 304.01,-541.6 304.01,-533.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-533.04 304.01,-523.04 300.51,-533.04 307.51,-533.04\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"228.01,-433 104,-415 228.01,-397 352.02,-415 228.01,-433\"/>\n",
       "<text text-anchor=\"middle\" x=\"228.01\" y=\"-409.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于80?</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M290.42,-487.04C278.86,-473.87 262.07,-454.76 248.81,-439.67\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"251.71,-437.67 242.48,-432.47 246.45,-442.29 251.71,-437.67\"/>\n",
       "<text text-anchor=\"middle\" x=\"281.07\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- a -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>a</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"407.51,-379 352.51,-379 352.51,-343 407.51,-343 407.51,-379\"/>\n",
       "<text text-anchor=\"middle\" x=\"380.01\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print A</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;a -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>3&#45;&gt;a</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M319.74,-487.33C332.59,-474.11 350.32,-453.82 361.01,-433 367.82,-419.74 372.37,-403.8 375.3,-390.39\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"378.68,-391.36 377.19,-380.87 371.81,-390 378.68,-391.36\"/>\n",
       "<text text-anchor=\"middle\" x=\"359.23\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"175.01,-325 51,-307 175.01,-289 299.02,-307 175.01,-325\"/>\n",
       "<text text-anchor=\"middle\" x=\"175.01\" y=\"-301.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于70?</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M219.96,-397.9C211.56,-381.09 198.24,-354.45 188.27,-334.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"191.42,-332.98 183.81,-325.6 185.16,-336.11 191.42,-332.98\"/>\n",
       "<text text-anchor=\"middle\" x=\"217.61\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- b -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>b</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"356.51,-271 301.51,-271 301.51,-235 356.51,-235 356.51,-271\"/>\n",
       "<text text-anchor=\"middle\" x=\"329.01\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print B</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;b -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>4&#45;&gt;b</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M245.14,-399.3C263.23,-382.9 291.38,-354.74 308.01,-325 315.34,-311.9 320.35,-295.97 323.64,-282.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"327.01,-283.48 325.76,-272.96 320.18,-281.96 327.01,-283.48\"/>\n",
       "<text text-anchor=\"middle\" x=\"305.53\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"124.01,-217 0,-199 124.01,-181 248.02,-199 124.01,-217\"/>\n",
       "<text text-anchor=\"middle\" x=\"124.01\" y=\"-193.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于60?</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.27,-289.9C159.18,-273.09 146.36,-246.45 136.77,-226.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"139.98,-225.11 132.49,-217.61 133.67,-228.14 139.98,-225.11\"/>\n",
       "<text text-anchor=\"middle\" x=\"165.31\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- c -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>c</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.51,-163 248.51,-163 248.51,-127 303.51,-127 303.51,-163\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print C</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;c -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>5&#45;&gt;c</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M193.08,-291.18C211.77,-274.88 240.5,-247 257.01,-217 264.24,-203.86 268.84,-187.81 271.7,-174.3\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"275.09,-175.18 273.5,-164.71 268.21,-173.89 275.09,-175.18\"/>\n",
       "<text text-anchor=\"middle\" x=\"254.43\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- d -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>d</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"166.89,-109 111.14,-109 111.14,-73 166.89,-73 166.89,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"139.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print D</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;d -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>6&#45;&gt;d</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M126.42,-180.97C128.73,-164.69 132.24,-139.82 134.98,-120.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"138.41,-121.23 136.35,-110.84 131.48,-120.25 138.41,-121.23\"/>\n",
       "<text text-anchor=\"middle\" x=\"143.86\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- e -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>e</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"245.14,-109 190.89,-109 190.89,-73 245.14,-73 245.14,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"218.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print E</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;e -->\n",
       "<g id=\"edge15\" class=\"edge\">\n",
       "<title>6&#45;&gt;e</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M139.14,-182.89C145.12,-176.8 151.98,-169.65 158.01,-163 171.22,-148.43 185.45,-131.64 196.74,-118.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"199.4,-120.32 203.07,-110.38 194,-115.86 199.4,-120.32\"/>\n",
       "<text text-anchor=\"middle\" x=\"196.26\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.01,-36 249.01,-36 249.01,0 303.01,0 303.01,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-11.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">结束</text>\n",
       "</g>\n",
       "<!-- a&#45;&gt;7 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>a&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M378.7,-342.75C377.22,-321.79 375.01,-285.32 375.01,-254 375.01,-254 375.01,-254 375.01,-90 375.01,-58.72 341.98,-39.89 314.08,-29.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"315.35,-26.3 304.76,-26.38 313.09,-32.92 315.35,-26.3\"/>\n",
       "</g>\n",
       "<!-- b&#45;&gt;7 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>b&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M327.05,-234.9C324.14,-210.72 318.12,-165.22 310.01,-127 303.03,-94.09 300.72,-85.89 290.01,-54 289.25,-51.72 288.41,-49.38 287.55,-47.03\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"290.81,-45.77 283.93,-37.71 284.29,-48.3 290.81,-45.77\"/>\n",
       "</g>\n",
       "<!-- c&#45;&gt;7 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>c&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M276.01,-126.62C276.01,-106.19 276.01,-71.99 276.01,-47.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"279.51,-47.75 276.01,-37.75 272.51,-47.75 279.51,-47.75\"/>\n",
       "</g>\n",
       "<!-- d&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>d&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.07,-75.46C187.84,-64.7 216.34,-49.92 238.99,-38.19\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"240.32,-41.44 247.58,-33.73 237.1,-35.23 240.32,-41.44\"/>\n",
       "</g>\n",
       "<!-- e&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>e&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M232.05,-72.81C238.89,-64.44 247.26,-54.2 254.85,-44.9\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"257.53,-47.16 261.14,-37.2 252.11,-42.73 257.53,-47.16\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x1bac4997890>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape':'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','请输入成绩=?', shape='parallelogram')\n",
    "dot.node('3','x是否大等于90?', shape='diamond')\n",
    "dot.node('4','x是否大等于80?', shape='diamond')\n",
    "dot.node('5','x是否大等于70?', shape='diamond')\n",
    "dot.node('6','x是否大等于60?', shape='diamond')\n",
    "dot.node('a','Print A')\n",
    "dot.node('b','Print B')\n",
    "dot.node('c','Print C')\n",
    "dot.node('d','Print D')\n",
    "dot.node('e','Print E')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','a7','b7','c7','d7','e7'])\n",
    "dot.edge('3','a',label='Yes')\n",
    "dot.edge('3','4',label='No')\n",
    "dot.edge('4','b',label='Yes')\n",
    "dot.edge('4','5',label='No')\n",
    "dot.edge('5','c',label='Yes')\n",
    "dot.edge('5','6',label='No')\n",
    "dot.edge('6','d',label='Yes')\n",
    "dot.edge('6','e',label='No')\n",
    "dot\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "你的等级是: B\n"
     ]
    }
   ],
   "source": [
    "def determine_grade(score):\n",
    "    if score >= 90:\n",
    "        return 'A'\n",
    "    elif score >= 80:\n",
    "        return 'B'\n",
    "    elif score >= 70:\n",
    "        return 'C'\n",
    "    elif score >= 60:\n",
    "        return 'D'\n",
    "    else:\n",
    "        return 'F'\n",
    "\n",
    "def main():\n",
    "    try:\n",
    "        score = float(input(\"请输入成绩（0-100）: \"))\n",
    "        if not 0 <= score <= 100:\n",
    "            print(\"成绩必须在0到100之间。\")\n",
    "        else:\n",
    "            grade = determine_grade(score)\n",
    "            print(f\"你的等级是: {grade}\")\n",
    "    except ValueError:\n",
    "        print(\"请输入一个有效的数字。\")\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                  *********************     \n",
      "                                -********************----   \n",
      "                             ----******          ****------ \n",
      "--                         ------***                *-------\n",
      "----                     ---------                     -----\n",
      "----***                ---------                         ---\n",
      "----******          ***-------                              \n",
      "  --*******************----                                 \n",
      "    *********************                                   \n",
      "       ***************                                      \n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "num_points = 100  \n",
    "width = 60       \n",
    "height = 10      \n",
    "scale_factor = 2  \n",
    "\n",
    "graph = [[' ' for _ in range(width)] for _ in range(height)]\n",
    "\n",
    "for i in range(num_points):\n",
    "    angle = 2 * math.pi * i / num_points\n",
    "    sin_value = math.sin(angle)\n",
    "    y_pos = int((sin_value + 1) / 2 * (height - 1))  \n",
    "    x_pos = int(i / num_points * (width - 1)) \n",
    "    line_width = 2\n",
    "    for dx in range(-line_width // 2, line_width // 2 + 1):\n",
    "        for dy in range(-line_width // 2, line_width // 2 + 1):\n",
    "            new_x = x_pos + dx\n",
    "            new_y = y_pos + dy\n",
    "            if 0 <= new_x < width and 0 <= new_y < height:\n",
    "                graph[new_y][new_x] = '*' if abs(sin_value) >= 0.5 else '-'\n",
    "\n",
    "for row in graph:\n",
    "    print(''.join(row))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "\n",
      "        * * *\n",
      "       * ** ** *\n",
      "     * ** *** ** *\n",
      "    * *** ****** ****** *** *\n",
      "  * **** ********* *********** ********* **** *\n",
      " * ****** ************* ******************** ******************** ************* ****** *\n"
     ]
    }
   ],
   "source": [
    "def generate_pascals_triangle(num_rows):\n",
    "    triangle = []\n",
    "    \n",
    "    for i in range(num_rows):\n",
    "        row = [1] * (i + 1)  \n",
    "        for j in range(1, i):\n",
    "            row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j]\n",
    "        triangle.append(row)\n",
    "    \n",
    "    return triangle\n",
    " \n",
    "def print_pascals_triangle_with_chars(triangle, max_value=None):\n",
    "   \n",
    "    if max_value is None:\n",
    "        max_value = max(max(row) for row in triangle)\n",
    "    \n",
    "    char_width = len(str(max_value)) \n",
    "    scale_factor = 5  \n",
    "    for row in triangle:\n",
    "        chars = []\n",
    "        for value in row:\n",
    "            num_stars = int(value * scale_factor / max_value * (scale_factor - 1) + 0.5) \n",
    "            chars.append('*' * num_stars)\n",
    "        \n",
    "        num_spaces = (len(triangle[-1]) - len(row)) * char_width \n",
    "        formatted_row = ' ' * (num_spaces // 2) + ' '.join(chars).ljust(len(triangle[-1]) * char_width)\n",
    "        formatted_row = formatted_row.rstrip()  \n",
    "        print(formatted_row)\n",
    " \n",
    "\n",
    "num_rows = 10\n",
    "pascals_triangle = generate_pascals_triangle(num_rows)\n",
    "print_pascals_triangle_with_chars(pascals_triangle)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      *\n",
      "     ***\n",
      "    *****\n",
      "   *******\n",
      "  *********\n",
      " ***********\n",
      "*************\n",
      "      **\n",
      "      **\n"
     ]
    }
   ],
   "source": [
    "def print_tree(height):\n",
    "    # 绘制树冠部分\n",
    "    for i in range(height):\n",
    "        # 每一行先打印空格，使星号居中\n",
    "        print(' ' * (height - i - 1) + '*' * (2 * i + 1))\n",
    "    \n",
    "    # 绘制树干部分\n",
    "    trunk_width = height // 3\n",
    "    trunk_height = height // 3\n",
    "    trunk_space = (height - trunk_width) // 2\n",
    "    \n",
    "    for i in range(trunk_height):\n",
    "        print(' ' * int(height-trunk_width/2)+ '*' * trunk_width)\n",
    "\n",
    "# 调用函数并设置树的高度\n",
    "print_tree(7)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.0"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
